package com.briup.smartlabs.service.impl;

import com.briup.smartlabs.bean.ex.DeviceType;
import com.briup.smartlabs.common.exceptions.DataValidateException;
import com.briup.smartlabs.mapper.ex.DeviceTypeMapper;
import com.briup.smartlabs.service.DeviceTypeService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.*;

/**
 * @author shaoyb
 * @program: Mybatis
 * @description TODO
 * @create 2023/5/30 18:02
 **/
@Service
public class DeviceTypeServiceImpl implements DeviceTypeService {

    @Autowired
    private DeviceTypeMapper deviceTypeMapper;

    @Override
    public void saveOrUpdate(DeviceType type) {
        // 首先判断id是否存在
        if (Objects.equals(type.getId(), "")) {
            // 新增
            type.setId(UUID.randomUUID().toString());
            deviceTypeMapper.insert(type);
        }else {
            // 更新
            deviceTypeMapper.updateById(type);
        }

    }

    @Override
    public void removeById(String id) {
        // 先查询一下id是否存在
        DeviceType deviceType = deviceTypeMapper.selectById(id);
        if(deviceType == null){
            throw new RuntimeException("要删除设备类型的id不存在");
        }
        // 如果存在，删除
        // 如果设备类型下边有设备则删除失败
        List<String> cunzai = deviceTypeMapper.selectAllByid(id);
        if (cunzai.isEmpty()) {
            deviceTypeMapper.deleteById(id);
        }else {
            throw new RuntimeException("要删除的设备类型下边还有设备");
        }
    }

    @Override
    public Map<String, List<String>> removeByBatch(String[] id) {
        if (id == null || id.length == 0) {
            throw new DataValidateException("参数为空");
        }
        // 首先创建两个集合用来存储成功的数据和失败的数据
        List<String> success = new ArrayList<String>(); // 删除成功的是指在数据库中存在的，并且下边没有设备相连接
        List<String> error = new ArrayList<String>();
        List<String> list = deviceTypeMapper.existById(id); // 在数据库中存在的数据
        // 多表连接，查找这个设备类型下有没有设备
        if (list != null && !list.isEmpty()) {
            List<String> cunzai = deviceTypeMapper.selectAll(list);
            for (String s : list) {
                // 如果有设备则不删除
                if (cunzai.contains(s)){
                    error.add(s);
                }else {
                    success.add(s);
                }
            }
        }
        // 如果这个设备类型在数据库中不存在，则直接加入失败的
        for (String s : id) {
            if (!list.contains(s)){
                error.add(s);
            }
        }
        // 删除添加成功的
        if(!success.isEmpty()){
            deviceTypeMapper.deleteByBatch(success);
        }
        Map<String, List<String>> map = new HashMap<>();
        map.put("success", success);
        map.put("error", error);
        return map;
    }

    @Override
    public PageInfo<DeviceType> findByCondition(int pageSize, int pageNum, String key) {
        // 配置分页
        PageHelper.startPage(pageNum, pageSize);
        // 普通查询
        List<DeviceType> deviceTypes = deviceTypeMapper.selectByCondition(key);
        return new PageInfo<>(deviceTypes);
    }
}
